Pull Complexity Downwards
「複雑さを下に引き下げる」
避けられない複雑さをモジュールのユーザに対処させる vs モジュール内部で複雑さを扱う その複雑さがモジュールが提供している機能に関係しているのであれば、「モジュール内部で複雑さを扱う」ほうが良い
モジュールは 利用者の数 > 開発者の数
モジュール開発者はユーザができるだけ楽できるように最善を尽くすべき
以下のような、インタフェースは利用者に負担をかける
例外を投げて呼び出し元に処理させる
呼び出し元すべてが例外を対処する必要がある
振る舞いを制御する設定パラメータを受け取る
利用者全員が設定方法(どのような値が適切か)を学ぶ必要がある
「ユーザや上位モジュールが、自分がここで決定できる値よりも、良い値を選択することができるか?」
また、デフォルト値を設定し、稀なケースでのみ値を設定できるようにしておくのも重要
やりすぎることが多いので、複雑さを下に引き下げるときは慎重に行うのが良い 極端なケースとしてはアプリケーション全体を1つのクラスにまとめることだが、これは意味がない
下に引き下げるのが理にかなっているのは以下のケース
引き下げる複雑さが、クラスの既存の機能と密接に関係している
引き下げることで、アプリケーションの他の部分をシンプルにする
引き下げることで、クラスのインタフェースがシンプルになる
hr.icon
要約
モジュールを開発するときは、ユーザや上位モジュールが楽できるように、苦労を少し引き受けるのがベスト